17. Creando páginas dinámicas con PHP.


17.1. Introducción. Conceptos básicos. Referencias.

Cuando estamos diseñando sitios Web, en numerosas ocasiones necesitamos que estos puedan interactuar con los usuarios, es decir, que el contenido que visualiza un usuario varíe según sus solicitudes o necesidades. A estas páginas las denominamos páginas dinámicas. Por el contrario, si las páginas que visualiza un usuario no pueden variar su contenido ni permiten interactuar con el usuario se les denominan páginas estáticas.

Profundizando un poco más, cuando mencionamos que las páginas dinámicas son las que pueden variar su contenido, esta variación podrá efectuarse desde el servidor o desde el cliente, o mejor dicho, el encargado de gestionar la petición de variación, procesar la página y mostrar el resultado al cliente puede ser el propio navegador del cliente o bien el servidor que está sirviendo las páginas.

Así distinguimos dos tipos de lenguajes: los que nos permiten crear mpáginas dinámicas del lado del cliente, como por ejemplo Javascript y los del lado servidor, PHP, JSP, ASP, etc. que son los que ahora nos ocupan.

Para indicar al servidor que antes de enviar la página al cliente debe procesarla utilizamos la extensión “PHP” de la página Web. Como por ejemplo “alta.php”.

Llegados a este punto, una definición de PHP (Hypertext Pre-processor) acertada sería la siguiente: lenguaje de programación interpretado del lado servidor que se incrusta en las páginas HTML/XHTML y permite crear páginas Web dinámicas.

Existen numerosas Web en Internet donde puedes encontrar abundante material sobre este lenguaje, manuales, ejemplos, tutoriales, etc. Desde aquí te proponemos las siguientes:

* Sitio Oficial de PHP. Dispone de un excelente manual.

* www.programacion.com/php. Sitio Web con multitud de ejemplos y manuales.

* www.desarrolloweb.com/php. Portal muy interesante, semejante al anterior.


17.2. Instalación y configuración de PHP.

Para el correcto uso de PHP necesitamos disponer de un servidor Web y un gestor de bases de datos, típicamente Apache2 y MySQL respectivamente. Puedes optar por instalar todas estas herramientas individualmente o bien utilizar una herramienta “todo en uno” como son XAMMP o Appserv ( http://www.apachefriends.org/es/xampp.html, http://www.appservnetwork.com/) Para obtener una información detallada dirígete al capítulo 9 “Servidores Web”.

Si te decides por instalar PHP a mano, es decir, mediante paquetes en Linux. Esta sería la instrucción a ejecutar en consola:

apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl



En los capítulos 9 “Servidores Web” y 2 “Instalación de GNU/Linux” te explicamos en detalle como disponer de un servidor instalado, configurado y optimizado con Apache, MySQL y PHP utilizando tanto aplicaciones “todo en uno” capítulo 9 como paso a paso capítulo 2.

Si has seguido los pasos indicados en el capítulo 2 o 9 todo estará configurado perfectamente, no obstante conviene saber que ficheros se han de revisar en caso de problemas. El servidor Apache dispone de dos directorios donde encontrarás los módulos que puede cargar y los módulos que tiene cargados y activos, son respectivamente: /etc/apache2/mods-available y /etc/apache2/mod-enable.

La primera comprobación a realizar es si dispones del módulo de PHP5 en el directorio /mod-available/, puedes realizarla mediante la siguiente instrucción:

a2enmod php5


Las instrucciones a2enmod y a2dismod son comandos de apache2 para habilitar y deshabilitar módulos respectivamente.

Observa el resultado, debes obtener: Module php5 already enabled, módulo php5 ya activo. Si dice que no dispones del módulo, instálalo mediante la orden:

sudo apt-get install php5 libapache2-mod-php5

El siguiente paso es crear el archivo /etc/apache2/mods-available/php5.load con el siguiente código:

LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

Ahora, crea el archivo /etc/apache2/mods-available/php5.conf e introduce las siguientes líneas:

<IfModule mod_php5.c>

AddType application/x-httpd-php .php .phtml .php3

AddType application/x-httpd-php-source .phps

</IfModule>

Tenemos que indicar que este módulo está activo para ello creamos dos enlaces al directorio /etc/apache2/mods-available. Estas son las instrucciones:

ln -s /etc/apache2/mods-available/php5.load /etc/apache2/mods-enabled/php5.load

ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf

Para finalizar reiniciamos el servidor:

sudo /etc/init.d/apache2 restart

Para comprobar que todo ha ido bien vamos a realizar otra comprobación:

1. Dirígete a /var/www/ y crea un fichero con esta línea:

<? phpinfo()?>

2. Guarda el fichero con el nombre: prueba.php

3. Ahora desde cualquier navegador intenta visualizar la página recién creada. En nuestro caso http//192.168.1.10/prueba.php desde la red local y desde Internet http://servidorlibre.homelinux.net/prueba. php.

El resultado que has de obtener te lo mostramos en la figura. Es la página de configuración de PHP donde podemos observar un buen número de parámetros y variables, posteriormente haremos más referencias a esta página.

También puedes realizar la instalación de PHP como cgi, Common Gateway Interface, en un programa aparte en vez de cómo un módulo del propio servidor Web. La instalación CGI es más insegura y ofrece peores prestaciones.


17.3. Nuestra primera página. “Hola mundo libre con PHP”

Ya tenemos todo listo para empezar a desarrollar nuestras páginas en PHP, empecemos pues sin más demora. Lo primero que debes saber es que el código PHP se incrusta en las páginas HTML/XHTML mediante la sección script que indicaremos con las etiquetas “<?” de apertura y “?>” de cierre, respectivamente.

También puedes indicar el código PHP mediante las etiquetas “<?php” y “?>” o “<script languaje=”PHP”>” y “</script>”.

Abre tu editor favorito y escribe el código que te mostramos a continuación.

Cuando finalices guarda el fichero en un directorio público de tu servidor Web con la extensión .php.

Analicemos en detalle:

* Observa que se trata de una página Web, ya que tiene las etiquetas comunes de HTML/XHTML.

* Fíjate a partir de la etiqueta <script languaje=”PHP”> Estamos indicando al servidor que ha de procesar el código que encuentre dentro, básicamente las instrucciones print y echo cuyo funcionamiento es similar y su sintaxis un poco distinta.

* Cada instrucción en PHP termina con punto y coma “;”.

* Para poner comentarios en PHP podemos utilizar “//” o “#”para una sola línea y la pareja de “/*” y “*/” para varías líneas.

* Podemos incluir líneas de HTML/XHTML en PHP, observa la instrucción print(“<BR>”); para introducir un salto de línea.


17.4. Aprendiendo en lenguaje.

El desarrollo que ha tenido PHP en estos últimos años se puede clasificar de exponencial, poco a poco se ha convertido en un lenguaje de programación muy completo y robusto, añadiendo por ejemplo características de lenguajes orientados a objetos. Es conveniente pararnos y estudiar con detalle todas las posibilidades de este lenguaje.


17.4.1. Variables y constantes.

Empecemos definiendo lo que es una variable, para nosotros es un valor que es susceptible de ser cambiado a lo largo de la ejecución de un programa, script. Así por ejemplo si estamos realizando un script que sume el valor de dos números introducidos por el teclado, podemos disponer de las variables: valor primero, valor segundo y resultado.

Por otro lado, una constante es un valor que no varía a lo largo de la ejecución de un script. Imagina el siguiente supuesto en que estamos desarrollando un script que nos calcule el cambio de moneda de pesetas a euros; en este caso el valor de cambio: 166,386 lo indicaríamos como una constante.

En PHP se puede trabajar con los siguientes tipos de variables:

* Enteros: Integer, representación de los números naturales y enteros. Ejemplo: -6.

* Cadenas: String, para representar caracteres o cadenas de caracteres. Ejemplo “Hola Mundo”.

* Lógicos: Boolean, tipo de dato que sólo puede tener dos valores: verdadero o falso.

* Números de punto flotante: Float, representación de los números reales. Ejemplo: 25.38.

* Matrices: tipo de dato compuesto formado por la agrupación de algún tipo de dato simple, por ejemplo un vector de 5 enteros es un tipo de dato que contiene cinco valores enteros. Nótese que es necesario disponer de un índice, clave, para acceder a los distintos elementos del vector.

* Objetos: al más puro estilo de la programación orientada a objetos, podemos crear clases y posteriormente definir variables de estas clases o lo que es lo mismo instancias de clases mediante objetos.

* Resource: variable que contiene un recurso externo como puede ser un fichero, una base de datos, etc.

* NULL: variable cuyo único valor posible es null, es como decir que no tienen nada o más concretamente que no apunta a nada.

Examinemos un ejemplo:


<HTML>

<head></head>

<body>

<H1> Variables y constantes PHP </H1>

<?php

$Ejemplo=1; //Declaración de la variable "Ejemplo" y asignación del valor 1

$Alejandra=23.6; //Declaración de la variable "Alejandra" y asignación del valor 23.6

/* Ejemplo es del tipo entero y, Alejandra es de tipo float

PHP realiza automáticamente la asignación de tipos a variables */

$resultado=$Ejemplo + $Alejandra;

echo "<br>La variable Ejemplo tiene el valor: $Ejemplo";

echo "<br>La variable Alejandra tiene el valor: $Alejandra";

echo "<br>La suma de los dos valores es: $resultado";

print("<br> Utilicemos la función print");

print("<br> La suma de los dos valores vuelve a ser: $resultado");

//Asignación automática del tipo de dato

$Ejemplo="Hola mundo libre";

$Alejandra=" con php";

print("<br> $Ejemplo$Alejandra"); //Muestra: Hola mundo libre con php

?>

<h3> Eurocalculadora </h3>

<?php

//Otro Script: Ejemplo de uso constante

define ("Cambio",166.386); //Declaración de constantes mediante la palabra reservada define

$pesetas=50;

$resultado=$pesetas/Cambio;

echo "<br> Si tienes: $pesetas pesetas dispones de $resultado Euros";

$resultado=$pesetas*Cambio;

echo "<br> En cambio, si dispones de $pesetas euros tendrás $resultado Pesetas";


?>

</body>

</HTML>

Fíjate:

* La sintaxis de declaración y asignación de variables es: $nombre_variable=valor;

* Podemos mostrar los valores de las variables con las funciones echo y print.

* PHP realiza automáticamente la asignación de tipos a las variables. Por tanto, no es necesario definir el tipo de la variable.

* PHP distingue entre mayúsculas y minúsculas, no es lo mismo $fijate que $Fijate

* El código PHP va inmerso en una página HTML/XHTML, pero dentro del propio script de PHP se puede mandar etiquetas de HTML/XHTML.

* En una misma página PHP pueden coexistir diversos scripts.

* La sintaxis para declarar y asignar constantes es: define (“constante”,valor);

* Todas las instrucciones en PHP terminan con punto y coma “;”.

* Las cadenas de caracteres se indican con comillas dobles “cadena”, mientras que si deseamos utilizar valores números no las incluiremos.

Veamos ahora un ejemplo de matrices y objetos:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

<HTML>

<title>Ejemplo de variables compuestas</title>

<head></head>

<body>

<?php

echo "<br>Ejemplo de vector de enteros";

//Declaración

$vector[4];

$Nombres[]="Paloma";

/*en PHP podemos crear arrays de dos maneras, indicando el tamaño de elementos que tiene (vector) o no (Nombres) */

//Los índices de matrices pueden ser enteros o cadenas de caracteres

$vector[0]=1;

$vector[1]=2;

$vector[2]=3;

$vector[3]=4;

echo"<br> Los valores de los elementos del vector son: $vector[0], $vector[1], $vector[2], $vector[3]”;

echo"<br>";

print_r($vector);

//Otra forma de declarar e inicializar la matriz

$nombres=array(1=>"Paloma",2=>"Diego");

echo"<br>";

print_r($nombres);

?>

<?php

//Clases

//Definición de la clase

class Cliente

{

var $DNI;

var $nombre;

}

//Creación del objeto

$miCliente = new Cliente;

//Asignación de valores

$miCliente->DNI="76564569P";

$miCliente->nombre="Luis Mingorance";

//Mostrar valores

echo"<br><h2>Ejemplo de clases</h2>";

echo"<br>El DNI del cliente ".$miCliente->nombre." es: ".$miCliente->DNI;

//Hemos utilizado el operador de concatenación de cadenas “.”

?>

</body>

</HTML>

Examínenos en detalle:

* Para declarar matrices podemos utilizar dos métodos:

* Nombrar simplemente las matrices (líneas 8 y 9).

* Crearlas con la función array (línea 22).

* Las claves de las matrices, índices, sólo pueden ser de dos tipos: enteros y cadenas de caracteres, por el contrario el valor de los elementos de las matrices pueden ser de cualquier tipo.

* Para mostrar los elementos de una matriz podemos utilizar la función echo, print o la función print_r (líneas 17-20).

* Antes de poder utilizar un objeto hemos de definir la clase (líneas 29-33).

* La creación de un objeto la realizamos mediante la instrucción new (línea 35).

* Para asignar valores al objeto utilizamos el operador -> (líneas 37 y 38).

* El operador de concatenación de cadenas es el punto “.” (línea 41).

17.4.2. Constantes y variables predefinidas

PHP dispone de un amplio conjunto de constantes y variables predefinidas, el uso de estas constantes no requiere de la instrucción define(“nombre”,valor); si deseas obtener la lista completa dirígete a las direcciones http://es2.php.net/manual/es/reserved.constants.php y http://es2.php.net/manual/es/language.variables.predefined.php respectivamente.

En la siguiente tabla te mostramos algunas de las variables predefinidas por defecto de PHP, esta tabla la hemos obtenido mediante la función phpinfo() en nuestro servidor.

PHP Variables:

Variable

Valor

_SERVER["HTTP_ACCEPT"]

image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*

_SERVER["HTTP_ACCEPT_LANGUAGE"]

Es (idioma)

_SERVER["HTTP_UA_CPU"]

x86 (arquitectura CPU)

_SERVER["HTTP_ACCEPT_ENCODING"]

gzip, deflate

_SERVER["HTTP_USER_AGENT"]

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; uE v7; InfoPath.2; .NET CLR 2.0.50727; uE v7)

_SERVER["HTTP_HOST"]

192.168.1.10

_SERVER["HTTP_CONNECTION"]

Keep-Alive

_SERVER["PATH"]

/usr/local/bin:/usr/bin:/bin

_SERVER["SERVER_SIGNATURE"]

<address>Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.3 with Suhosin-Patch Server at 192.168.1.10 Port 80</address>

_SERVER["SERVER_SOFTWARE"]

Apache/2.2.8 (Ubuntu) PHP/5.2.4-2ubuntu5.3 with Suhosin-Patch

_SERVER["SERVER_NAME"]

192.168.1.10

_SERVER["SERVER_ADDR"]

192.168.1.10

_SERVER["SERVER_PORT"]

80

_SERVER["REMOTE_ADDR"]

192.168.1.2

_SERVER["DOCUMENT_ROOT"]

/var/www/

_SERVER["SERVER_ADMIN"]

webmaster@localhost

_SERVER["SCRIPT_FILENAME"]

/var/www/ejemplosphp/ prueba.php

_SERVER["REMOTE_PORT"]

1586

_SERVER["GATEWAY_INTERFACE"]

CGI/1.1

_SERVER["SERVER_PROTOCOL"]

HTTP/1.1

_SERVER["REQUEST_METHOD"]

GET

_SERVER["QUERY_STRING"]

no value

_SERVER["REQUEST_URI"]

/ejemplosphp/prueba.php

_SERVER["SCRIPT_NAME"]

/ejemplosphp/prueba.php

_SERVER["PHP_SELF"]

/ejemplosphp/prueba.php

_SERVER["REQUEST_TIME"]

1228643493

_SERVER["argv"]

Array ()

_SERVER["argc"]

0

_ENV["APACHE_PID_FILE"]

/var/run/apache2.pid

_ENV["PATH"]

/usr/local/bin:/usr/bin:/bin

_ENV["LANG"]

C

_ENV["APACHE_RUN_GROUP"]

www-data

_ENV["APACHE_RUN_USER"]

www-data

_ENV["PWD"]

/


17.4.3 Ámbito de las variables. Funciones.

Por defecto el ámbito de las variables en PHP es local, es decir, las variables son accedidas desde el procedimiento que se creó, script, y no pueden ser accedidas desde otro procedimiento. Por consiguiente, dentro de un script las variables son visibles, pero si dentro del mismo script declaramos alguna función con variables, estas no serán accesibles desde el script, sólo dentro de la función. Dentro de dicha función tampoco podremos acceder a las variables del script.

Aclarémoslo con un ejemplo:

<HTML>

<title>ejemplo ámbito </title>

<head></head>

<body>

<?php

$valor1=5;

$valor2=25;

$resultado=$valor1*$valor2;

echo"<br>El valor de resultado es: $resultado";

function Ambito(){

//Desde aquí no accedemos a la variable resultado

echo"<br>El valor de resultado es: $resultado";

}

Ambito();

?>

</body>

</HTML>


Este es el resultado que obtenemos en pantalla. Lo que ocurre es que cuando intentamos acceder al valor de la variable resultado dentro de la función Ambito, esta no reconoce la variable, luego no la muestra.


En el ejemplo hemos definido nuestra primera función, la sintaxis para declarar funciones es function nombre_función(), y encerrado entre llaves { } el cuerpo de la misma. Para llamar a la función simplemente la nombramos: nombre_función();

Para poder acceder dentro de las funciones a las variables declaradas en el script disponemos de la palabra clave global.

<HTML>

<title>ejemplo ámbito </title>

<head></head>

<body>

<?php

$valor1=5;

$valor2=25;

$resultado=$valor1*$valor2;

echo"<br>El valor de resultado es: $resultado";

function Ambito(){

global $resultado;

//Desde aquí si accedemos a la variable resultado utilizando global

echo"<br>El valor de resultado es: $resultado";

}

Ambito();

?>

</body>

</HTML>

<HTML>

Si anteponemos la palabra global antes de la declaración de la variable, PHP entiende que es una variable declarada previamente y de este modo sí podemos acceder al valor de esta dentro de la función.

Además, si deseamos mantener el valor de una variable que hemos declarado dentro de una función una vez acabada esta utilizaremos la palabra reservada static a la hora de declararla.


17.4.4. Interactúa con el usuario. Formularios.

Hasta el momento hemos realizado scripts, que se ejecutaban directamente sin la intervención del usuario. Sin embargo, la esencia de php es la interacción con el usuario para poder así gestionar sus necesidades y desarrollar aplicaciones profesionales.

Para comunicarnos con los usuarios hacemos uso de los formularios HTML/XHTML que van a ser nuestro hilo conductor, los formularios disponen de dos métodos de envío de información: GET y POST. Si deseas profundizar en el uso de formularios así como las estructuras y sintaxis de HTML/XTHML dirígete al capítulo 10.


No es aconsejable realizar el envío de datos a través de formularios mediante el método GET ya que ofrece menos seguridad, los datos y las variables aparecen directamente en la barra de direcciones del navegador del cliente.


La utilización del método POST en los formularios para enviar información es la más habitual y recomendable para interactuar con el usuario. Veamos un ejemplo en el cual crearemos un formulario “página formulario.html” y presentaremos la información introducida mediante un script en php “página formulario.php”.

Este es el código fuente de la página formulario.html. Analicémoslo en detalle:

Formulario.html

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

<HTML>

<head></head>

<title>Guía del perfecto WebMaster. Formularios </title>

<body>

<h1> Ejemplo de formulario </h1>

<hr />

<form name="form1" method="post" action="formulario.php">

<!-- Etiqueta formulario en la que hemos especificado el método post y la

página "formulario.php" que procesará los valores -->


Introduce un número:<input type="text" name="text_Numero" size=2>

<!-- Ejemplo de campo Texto-->

<br>

Introduce una contraseña:<input type="password" name="text_password" size=8>

<!-- Ejemplo de campo Contraseña-->

<br>

¿Estás afiliado?<input type="checkbox" name="checkboxAfiliado" value="SI">

<!-- Ejemplo de campo checkbox-->

<br>

Hombre:<input type="radio" name="radiobuttonSexo" value="radiobutton">

Mujer:<input type="radio" name="radiobuttonSexo" value="radiobutton">

<br>

<!--Ejemplo de campo radiobutton-->

Edad:<select name="Edad">

<option> menos de 10 </option>

<option> entre de 11 y 50 </option>

<option> mas de 50 </option>

</select>

<!-- Ejemplo de campo select -->

<br>

¿Quieres subir un fichero?<input type="file" name="file_Fichero">

<br>

<!-- Ejemplo de campo file -->

Comentarios:

<br><textarea name="AreaComentarios" rows="10" cols="50" </textarea>

<!--Ejemplo de campo area-->

<br>

<input type="hidden" name="privado" value="No lo sabe">

<!--Ejemplo de campo oculto-->

<input type="submit" name="Submit" value="Procesar">

<!-- Ejemplo de campo botón -->

<input type="reset" name="reset" value="Limpiar formulario">

<!-- Ejemplo de campo botón -->

</form>

</body>

</HTML>


* El fichero en sí no es necesario que tenga la extensión php ya que se trata de un formulario en HTML/XHTML.

* La etiqueta de formulario en HTML/XHTML es <form></form>, hemos de indicar el método utilizado y la página en php que procesará los datos, en nuestro caso formulario.php (línea 7).

* El ejemplo continúa mostrando los campos más utilizados que podemos incluir en un formulario HTML/XHTML.

* El campo más habitual es el de tipo texto indicado mediante la instrucción: <input type="text" name="text_Numero" size=2>El atributo name nos proporciona un valor para la posterior identificación en el script php. Hemos de ser cuidadosos al nombrar los campos (línea 11).

* Si deseas introducir un campo para recoger contraseñas utiliza un tipo password. (línea 14).

* En los campos checkbox además de indicar el nombre del campo, es importante reseñar el atributo I> value ya que este es el que se pasará como parámetro si el usuario selecciona el campo (línea 17).

* Para la opción de un botón de radio, has de indicar con el mismo nombre las distintas opciones posibles para que sean excluyentes entre sí. Al igual que con los checkbox el valor que se pasa es el indicado en el parámetro value (líneas 21-22).

* Si deseas crear una lista desplegable utiliza la etiqueta <select></select> con el parámetro name. Por cada valor de la lista desplegable has de especificar una pareja de etiquetas <option> </option> (líneas 24-29)

* El tipo file te permite indicar un fichero del equipo cliente (línea 32).

* El campo área de texto lo indicamos mediante la etiqueta <textarea></textarea>. Es conveniente indicar el número de filas y columnas que ocupará en pantalla mediante los parámetros rows y cols respectivamente (línea 36).

* Puedes incluir campos ocultos que el usuario no verá en los formularios mediante el tipo hidden (línea 39).

* Los botones se indican mediante los tipos submit y reset, el valor que indiques en el parámetro value aparecerá como título del botón (líneas 41-44).


En esta ilustración te mostramos como queda nuestra página.

En el momento que pulsemos sobre el botón Procesar se enviarán los valores introducidos en el formulario a la página indicada por la etiqueta <form></form>, en nuestro caso formulario.php.

Veamos a continuación el código fuente de esta página

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

<HTML>

<head></head>

<title>Guía del perfecto WebMaster. Formularios </title>

<body>

<h1> Ejemplo de formulario. Recolección de datos </h1>

<hr />


<?php

echo "Escribiste el número: ";

print ($_POST["text_Numero"]);

echo "<br>";

echo "La contraseña es: ". $_POST["text_password"];

echo "<br>";

if ($_POST["checkboxAfiliado"]!="SI")

{$_POST["checkboxAfiliado"]="NO";}

echo "Se pulso sobre afiliado: ". $_POST["checkboxAfiliado"];

echo "<br>";

echo "Tu edad es: ". $_POST["Edad"];

echo "<br>";

echo "El fichero que has seleccionado es: ". $_POST["file_Fichero"];

echo "<br>";

echo "En comentarios se escribió: ". $_POST["AreaComentarios"];

echo "<br>";

echo "El campo oculto contiene el valor: ". $_POST["privado"];

echo "<br>";

?>

</body>

</HTML>

* Para recoger los valores de las variables utilizamos la variable predefinida $_POST[“nombre_campo”], donde nombre campo son los distintos valores que hemos asignado al parámetro nombre de los campos incluidos en el formulario de la página en HTML/XHTML.

* Fíjate en las líneas (14-15) hemos utilizado una estructura condicional simple if para inspeccionar y asignar el valor correcto a la variable checkboxAfiliado. En el siguiente epígrafe te explicamos en detalle este tipo de estructuras.

* Si en vez de utilizar el método POST deseas utilizar el método GET la variable predefinida será $_GET[“nombre_campo”];

Existe un tercer método para recoger valores del usuario y es indicar a php que los procese como variables globales de la forma $nombre_campo. No es muy recomendable pero si deseas esta posibilidad dirígete al fichero php.ini y cambia el valor de la variable register_globals a ON.


En esta ilustración te mostramos el resultado obtenido, una vezprocesado el script.

17.4.5. Estructuras de control.

Como cualquier lenguaje de programación PHP dispone de instrucciones para modificar el flujo de ejecución de sus scripts. Estas son las denominadas estructuras de control.

Para estudiar las estructuras vamos a partir de un formulario simple, en el cual introduciremos tres números, a continuación te mostramos el código fuente.

Observa que para el procesamiento hemos indicado la página control.php dentro de la etiqueta del formulario.


<HTML>

<head></head>

<title>Guía del perfecto WebMaster.</title>

<body>

<h1>Estructuras de control </h1>

<hr />

<form name="form1" method="post" action="control.php">

<!-- Etiqueta formulario en la que hemos especificado el método post y la

página "control.php" que procesará los valores -->

Introduce un número (A):<input type="text" name="txt_NumeroA" size=2>

<br>

Introduce un número (B):<input type="text" name="txt_NumeroB" size=2>

<br>

Introduce un número (C):<input type="text" name="txt_NumeroC" size=2>

<br>


<input type="submit" name="Submit" value="Procesar">

<!-- Ejemplo de campo boton -->

<input type="reset" name="reset" value="Limpiar formulario">

<!-- Ejemplo de campo boton -->

</form>

</body>

</HTML>


17.4.5.1. Estructuras de control condicionales.


<HTML>

<head></head>

<title>Guía del perfecto WebMaster.</title>

<body>

<h1> Estructuras de control</h1>

<hr />


<?php

$a=$_POST["txt_NumeroA"];

$b=$_POST["txt_NumeroB"];

$c=$_POST["txt_NumeroC"];

//Estructura de control simple

if ($a>=$b && $a>=$c)

{

echo "<br>El número más grande que introdujiste fue: ".$a;

exit();

}

if ($b>=$a && $b>=$c)

{

echo "<br>El número más grande que introdujiste fue: ".$b;

exit();

}

if ($c>=$a && $c>=$b)

{

// Realmente no haría falta este último if, se muestra como ilustración

echo "<br>El número más grande que introdujiste fue: ".$c;

exit();

}

?>

</body>

</HTML>


Para saber cuál fue el número más grande introducido por el usuario podemos utilizar la sentencia if.

La sintaxis de esta sentencia es:

if (condición)

{

instrucciones;

}

Donde se evalúa la condición y en caso de ser cierta se ejecutan las instrucciones contenidas entre las llaves.

Analicemos el ejemplo:

* Hemos recogido las variables del formulario en nuestras propias variables.

* Fíjate la condición puede ser múltiple y puedes usar operadores relacionales y de comparación.

* Introducimos la sentencia exit(); para finalizar la ejecución del script. De esta manera en cuanto se cumpla una condición y se muestre el resultado finalizará la ejecución del script.

Podemos utilizar estructuras condicionales dobles, en este caso la sintaxis es:

if(condicion)

{

instrucciones;

}else(condicion)

{

instrucciones;

}

<HTML>

<head></head>

<title>Guía del perfecto WebMaster.</title>

<body>

<h1> Estructuras de control</h1>

<hr />

<?php

$a=$_POST["txt_NumeroA"];

$b=$_POST["txt_NumeroB"];

$c=$_POST["txt_NumeroC"];

//Estructura de control doble anidada.

if ($a>=$b && $a>=$c)

{

echo "<br>El número más grande que introdujiste fue: ".$a;

}elseif ($b>=$a && $b>=$c)

{

echo "<br>El número más grande que introdujiste fue: ".$b;

}else

{

echo "<br>El número más grande que introdujiste fue: ".$c;

}

?>

</body>

</HTML>

Volvamos a analizar el código fuente:

* Observa que podemos anidar las estructuras condicionales, en este caso hemos utilizado elseif

* No se ha utilizado la instrucción exit();

Otra estructura de control condicional es la instrucción switch.Su sintaxis es la siguiente:

switch (variable) {

case valor1:

instrucciones;

break;

case valor2:

instruciones;

break;

……

default:

instrucciones;

}

Se evalúa la variable utilizada y según el valor que tenga se ejecutará una serie de instrucciones u otro, dicho bloque de instrucciones finalizará con la sentencia break. Si no se encuentra o coincide con un valor especificado se realizarán las instrucciones de la sección default.


17.4.5.2. Estructuras de control repetitivas.

Muchas veces se nos hace necesario procesar un conjunto de instrucciones repetidas veces, para realizar estas tareas disponemos de las estructuras de control repetitivas o comúnmente llamadas bucles.

Quizás la más utilizada sea while que ejecuta las instrucciones que están dentro de su cuerpo mientras la condición que evalúa sea cierta.

¿Qué crees que realiza el ejemplo que te estamos mostrando?

$iteraciones=1;

while ($iteraciones<=$c)

{

echo "<br>";

$ladrillo=1;

while ($ladrillo<=$iteraciones)

{

echo "#";

$ladrillo++;

}

$iteraciones++;

}

A primera vista observamos dos bucles while anidados, en el primero la variable $c no sabemos el valor que tiene, luego es factible suponer que se ha pasado como parámetro.

Se ejecuta lo que esté dentro del primer while hasta que $iteraciones sea mayor o igual que la variable $c; observa también que dentro del propio bucle incrementamos el valor de $iteraciones con el operador de autoincremento $iteraciones++.

Nos queda el segundo bucle, aquí se van dibujando en pantalla el carácter # hasta que la variable $ladrillo, que al empezar el bucle siempre tiene el valor 1, alcanza el valor de la variable $iteraciones. Lo que realiza este script es pintar una pirámide en pantalla.

Es sumamente importante verificar que los bucles que crees finalicen alguna vez, asegurándote que la condición se volverá falsa alguna vez. Evita así bucles infinitos que nunca terminan de ejecutarse.

En el ejemplo expuesto utilizados respectivamente las instrucciones:

$iteraciones++; y $ladrillos++;

El bucle while se denomina comúnmente como bucle repite mientras, otro bucle similar es el bucle repite hasta o do while. Veamos cómo funciona:

$iteraciones=1;

do

{

echo "<br>";

$ladrillo=1;

do

{

echo "#";

$ladrillo++;

}while ($ladrillo<=$iteraciones);

$iteraciones++;

}while ($iteraciones<=$c);

?>

La diferencia entre ambos bucles es que en el bucle do while o “repite hasta”, por lo menos se ejecutan una vez las instrucciones del cuerpo del bucle mientras que el del bucle “repite mientras” o while puede darse el caso que no se ejecuten nunca las instrucciones contenidas dentro del cuerpo.

Otra estructura de control repetitiva es el bucle for, su sintaxis es la siguiente:

for ( inicialización; condición; incremento / decremento)

Consta de tres partes separadas por el carácter “;”, la inicialización del bucle, donde incluiremos las variables que estimemos oportunas, la condición a evaluar cada vez que se complete un ciclo del bucle y el incremento o decremento de las variables de la condición del bucle que nos asegura la finalización del bucle, evitando así los bucles infinitos.

A continuación te exponemos el código fuente del script de construcción de pirámides mediante el bucle for.

for ($iteraciones=1;$iteraciones<=$c;$iteraciones++)

{

echo"<br>";

for ($ladrillo=1;$ladrillo<=$iteraciones;$ladrillo++)

{

echo "#";

}

}

La última estructura de control repetitiva que te vamos a mostrar es el bucle foreach, esta estructura solamente funciona con matrices. Dispone de dos sintaxis similares que son:

foreach ($matriz as $variable)

{

Instrucciones;

}

foreach ($matriz as $indice=>$variable)

{

Instrucciones;

}

Ambas recorren la matriz asignando los distintos valores de esta a la variable $variable. Un ejemplo muy útil de este tipo de estructura consiste en recorrer la matriz $_POST que contiene todas las variables que se han pasado como parámetros en los formularios e ir trabajando con ellas. Este es el código fuente que muestra por pantalla los distintos valores de un formulario:

foreach($_POST as $valor)

{

echo "$valor<br />\n";

}

foreach ($_POST as $indice=>$valor)

{

echo "$valor<br />\n";

}


17.5. Funciones, funciones y más funciones.

Existen multitud de funciones que podemos utilizar en PHP, de cadenas de caracteres, matemáticas, matrices, fechas, etc.

Se nos hace imposible por la extensión de esta obra poner un ejemplo y centrarnos en el estudio de cada una. Existen en Internet las denominadas chuletas que proporcionan una información rápida y clara de las funciones. Desde aquí te proponemos las que a nuestro parecer nos resultan más útiles y sencillas, que te permitirán ser más eficiente, puedes encontrarlas en las siguientes direcciones:

http://www.emezeta.com/articulos/emezeta-card-php-cheat-sheety

http://www.addedbytes.com/cheat-sheets/php-cheat-sheet-version-1/